package com.hewep.demo.service.ribbon;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

/**
 * @author YM20051
 * @description:
 * 1. Spring cloud有两种服务调用方式，一种是ribbon + restTemplate，另一种是feign
 * 2. ribbon是一个负载均衡客户端，可以很好的控制http和tcp的一些行为。Feign默认集成了ribbon
 * 3. 为了保证服务的高可用, 单个服务通常会集群. 由于网络或者服务自身的原因, 服务不能保证100% 可用,
 *    如果单个服务出现问题, 调用服务就会出现线程阻塞, 如果大量请求过来, 就会导致服务瘫痪. 服务于服务之间的
 *    依赖性, 故障会传播, 就对整个系统造成灾难性的后果, 这服务故障的 "雪崩" 效应
 * @date 2018/2/12 10:31
 */
@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrix
@EnableHystrixDashboard
public class ServiceRibbonApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceRibbonApplication.class, args);
    }

    @Bean
    @LoadBalanced
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
